#include <iostream>
#include <string>
#include <sstream>
#include <random>
#include <iomanip>
#include <atomic>

std::string uuid()
{
    std::random_device rd;
    std::mt19937_64 generator(rd());//种下种子生成随机数
    std::uniform_int_distribution<int> distribution(0,255);//指定随机数范围
    std::stringstream ss;
    for(int i=0;i<8;i++)
    {
        ss<<std::setw(2)<<std::setfill('0')<<std::hex<<distribution(generator);//生成宽度为2,不足用0填充的十六进制数
        if(i==3||i==5||i==7) ss<<"-";
    }

    //生成自增长的序号
    static std::atomic<size_t> seq(1);
    size_t num=seq.fetch_add(1);
    for(int i=7;i>=0;i--)
    {
        ss<<std::setw(2)<<std::setfill('0')<<std::hex<<(num>>(i*8)&0xff);
        if(i==6) ss<<"-";
    }

    return ss.str();
}

int main()
{
    for(int i=0;i<20;i++)
        std::cout<<uuid()<<std::endl;;
    return 0;
}